package com.myk.game.heroscuffle.heroes;

import com.myk.game.heroscuffle.game.Attacked;
import com.myk.game.heroscuffle.game.Element;
import com.myk.game.heroscuffle.game.Hero;
import com.myk.game.heroscuffle.game.HeroMind;
import com.myk.game.heroscuffle.utils.RdmPropUtil;

public class Hero_JingYa extends Hero {

    public Hero recentPrey; //最近一次我攻击的猎物
    public Hero recentEnemy; //最近一次攻击我的仇人

    public Hero_JingYa() {
        super("惊犽", "暂无", Element.THUNDER, 1100, 180, 50);
    }

    @Override
    public void initHeroMind() {
        this.mind = new HeroMind(this);
        mind.setCustomAttackedSelector(() -> {
            Hero enemy = getAliveEnemy(); //获取仇人目标
            Hero prey = getAlivePrey(); //获取猎物目标
            Hero other = game.pool.getAnyoneAliveHero(this, enemy, prey); //获取其它类型目标
            boolean isOnlyOneChoice = game.pool.getAliveCount() == 2; //只剩下一个目标了（另外一个是自己）
            boolean isHasEnemyOrPrey = enemy != null || prey != null; //存在仇人或者猎物
            //只剩下一个对手时
            if (isOnlyOneChoice) {
                Hero target = game.pool.getAnyoneAliveHero(this);
                return new Attacked(target, "别无它选径直攻击");
            }
            //有意向目标时（这种情况就复杂了）
            if (isHasEnemyOrPrey) {
                //更大的几率攻击意向目标，但是偶尔也会有偏差攻击其它人
                if (other == null || RdmPropUtil.bingo(state.exactRate)) {
                    if (enemy != null) { //有仇人先打仇人
                        if (enemy == prey) {  //仇人和猎物相同形成对手（世仇）
                            return new Attacked(enemy, "怒目相对疯狂攻击");
                        }
                        else {
                            return new Attacked(enemy, "恼羞成怒奋力反击");
                        }
                    }
                    else {//没有仇人的话就只能打猎物了
                        return new Attacked(prey, "顺风顺水连续追击");
                    }
                }
                else {
                    return new Attacked(other, "无缘无故随意攻击");
                }
            }
            //没有意向目标时（此时肯定有超过两个其它角色，既没有仇人也没有猎物，那么other肯定存在）
            else {
                return new Attacked(other, "漫无目的随机攻击");
            }
        });

    }


    public Hero getAliveEnemy() {
        if (recentEnemy != null && recentEnemy.state.isAlive) return recentEnemy;
        else return null;
    }

    public Hero getAlivePrey() {
        if (recentPrey != null && recentPrey.state.isAlive) return recentPrey;
        else return null;
    }

    /**
     * 获取互有恩怨的世仇，即既是最近我攻击的人，又是最近攻击我的人
     */
    public Hero getAliveFeud() {
        Hero aliveEnemy = getAliveEnemy();
        Hero alivePrey = getAlivePrey();
        if (aliveEnemy == null || alivePrey == null) {
            return null;
        }
        if (aliveEnemy != alivePrey) {
            return null;
        }
        return aliveEnemy;
    }
}
